
class Base:
	var _context := ""
	
	func _init(p_context):
		_context = p_context
	
	func debug(msg: String):
		pass

	func warn(msg: String):
		push_warning("{0}: {1}".format([_context, msg]))
	
	func error(msg: String):
		push_error("{0}: {1}".format([_context, msg]))


class Verbose extends Base:
	func _init(p_context: String).(p_context):
		pass
		
	func debug(msg: String):
		print(_context, ": ", msg)


static func get_for(owner: Object) -> Base:
	# Note: don't store the owner. If it's a Reference, it could create a cycle
	var context = owner.get_script().resource_path.get_file()
	if OS.is_stdout_verbose():
		return Verbose.new(context)
	return Base.new(context)

